package com.yanqu.road.server.cmd.activity.douluodalu;

import com.yanqu.road.entity.activity.douluodalu.config.DouLuoDaLuConfig;
import com.yanqu.road.entity.activity.douluodalu.config.DouLuoDaLuEventInfo;
import com.yanqu.road.entity.activity.douluodalu.enums.eDouLuoDaLuEventType;
import com.yanqu.road.entity.enums.eGamePlayerEventType;
import com.yanqu.road.entity.enums.eLogMoneyType;
import com.yanqu.road.entity.log.LogDouLuoDaLuEventHandle;
import com.yanqu.road.message.YanQuMessage;
import com.yanqu.road.pb.activity.douluodalu.DouLuoDaLuProto;
import com.yanqu.road.server.cmd.base.AbstractCommand;
import com.yanqu.road.server.command.Cmd;
import com.yanqu.road.server.gameplayer.GamePlayer;
import com.yanqu.road.server.gameplayer.module.activity.douluodalu.DouLuoDaLuModule;
import com.yanqu.road.server.gameplayer.module.player.CurrencyModule;
import com.yanqu.road.server.manger.activity.douluodalu.DouLuoDaLuMgr;
import com.yanqu.road.server.manger.log.AutoLogMgr;
import com.yanqu.road.server.manger.log.LogMgr;
import com.yanqu.road.server.protocol.GameErrorCode;
import com.yanqu.road.server.protocol.Protocol;
import com.yanqu.road.utils.date.DateHelper;
import com.yanqu.road.utils.property.Property;
import com.yanqu.road.utils.property.PropertyHelper;
import com.yanqu.road.utils.string.StringUtils;

@Cmd(code = Protocol.S_DOU_LUO_DA_LU_EVENT_HANDLE_FROM_CROSS,desc = "事件处理-跨服返回")
public class DouLuoDaLuEventHandleCmdFromCross extends AbstractCommand {


    @Override
    public boolean parseData(YanQuMessage packet) throws Exception {
        return true;
    }

    @Override
    public void execute(GamePlayer player, YanQuMessage packet) throws Exception {
        DouLuoDaLuProto.DouLuoDaLuEventHandleCrossRespMsg crossRespMsg = DouLuoDaLuProto.DouLuoDaLuEventHandleCrossRespMsg.parseFrom(packet.getBytes());
        DouLuoDaLuProto.DouLuoDaLuEventHandleRespMsg.Builder respMsg = DouLuoDaLuProto.DouLuoDaLuEventHandleRespMsg.newBuilder();
        if(crossRespMsg.getRet() != 0){
            respMsg.setRet(crossRespMsg.getRet());
            player.sendPacket(Protocol.U_DOU_LUO_DA_LU_EVENT_HANDLE, respMsg);
            return;
        }

        respMsg.setRet(crossRespMsg.getRet());
        respMsg.setBlood(crossRespMsg.getBlood());
        respMsg.setDamage(crossRespMsg.getDamage());

        DouLuoDaLuConfig config = DouLuoDaLuMgr.getConfig();
        DouLuoDaLuEventInfo eventInfo = config.getEventInfo(crossRespMsg.getEventId());
        if(eventInfo == null){
            respMsg.setRet(GameErrorCode.E_DOU_LUO_DA_LU_CONFIG_NOT_EXIST);
            player.sendPacket(Protocol.U_DOU_LUO_DA_LU_EVENT_HANDLE, respMsg);
            return;
        }
        //处理日志
        LogDouLuoDaLuEventHandle log = new LogDouLuoDaLuEventHandle(DouLuoDaLuMgr.getActivityInfo().getActivityId(), player.getUserId(), crossRespMsg.getTeamId(), crossRespMsg.getRegionId(),
                eventInfo.getEventType(), eventInfo.getEventId(), crossRespMsg.getAction(), crossRespMsg.getTargetId(), crossRespMsg.getEventTime(), crossRespMsg.getEventStatus(),
                crossRespMsg.getDamage() + crossRespMsg.getBlood(), crossRespMsg.getBlood(), crossRespMsg.getDamage(), crossRespMsg.getReward(), crossRespMsg.getBuffList(), crossRespMsg.getScore());

        CurrencyModule currencyModule = player.getModule(CurrencyModule.class);
        if(eventInfo.getEventType() == eDouLuoDaLuEventType.ForestFair.getIntValue()){

            //现金事件,可能有积分奖励
            int now = DateHelper.getCurrentSecond();
            int touchMallId = player.getModule(DouLuoDaLuModule.class).randomMall(now);
            if(touchMallId > 0){
                respMsg.setMallInfo(DouLuoDaLuProto.DouLuoDaLuUserMallInfo.newBuilder().setMallId(touchMallId).setTouchTime(now));
            }
            if(crossRespMsg.hasScore() && crossRespMsg.getScore() > 0){
                //currencyModule.addCurrency(DouLuoDaLuMgr.getConfig().SCORE_ITEM_ID_FOREST + "=" + crossRespMsg.getScore(), eLogMoneyType.DouLuoDaLuActivity, eLogMoneyType.DouLuoDaLuForestFairEventReward);
            }

            log.setTargetId(touchMallId);

        }else if(eventInfo.getEventType() == eDouLuoDaLuEventType.MonsterBoxEvent.getIntValue()){

            //宝箱事件，虽然是道具，但是不加到背包，无意义
            respMsg.setReward(crossRespMsg.getReward());

        }else if(eventInfo.getEventType() == eDouLuoDaLuEventType.MonsterKingHouseEvent.getIntValue()){
            //兽王宝库

            //加积分道具
            if(crossRespMsg.getScore() > 0){
                //currencyModule.addCurrency(DouLuoDaLuMgr.getConfig().SCORE_ITEM_ID_FOREST + "=" + crossRespMsg.getScore(), eLogMoneyType.DouLuoDaLuActivity, eLogMoneyType.DouLuoDaLu1MonsterKingHouseEventReward);
            }

            currencyModule.addCurrency(crossRespMsg.getReward(), eLogMoneyType.DouLuoDaLuActivity, eLogMoneyType.DouLuoDaLu1MonsterKingHouseEventReward);
            respMsg.setReward(crossRespMsg.getReward());

        }else if(eventInfo.getEventType() == eDouLuoDaLuEventType.ShrekGiftsEvent.getIntValue()){

            //七怪赠礼-试炼石
            currencyModule.addCurrency(crossRespMsg.getReward(), eLogMoneyType.DouLuoDaLuActivity, eLogMoneyType.DouLuoDaLuShrekGiftsEventReward);
            //积分道具
            //currencyModule.addCurrency(DouLuoDaLuMgr.getConfig().SCORE_ITEM_ID_FOREST + "=" + crossRespMsg.getScore(), eLogMoneyType.DouLuoDaLuActivity, eLogMoneyType.DouLuoDaLuShrekGiftsEventReward);
            respMsg.setReward(crossRespMsg.getReward());

        }else if(eventInfo.getEventType() == eDouLuoDaLuEventType.BuffEvent.getIntValue()){

            //仙草奖励,虽然是道具，但是不加到背包，无意义
            respMsg.setReward(crossRespMsg.getReward());

        }else if(eventInfo.getEventType() == eDouLuoDaLuEventType.MonsterEvent.getIntValue() || eventInfo.getEventType() == eDouLuoDaLuEventType.PlayerEvent.getIntValue()){
            eLogMoneyType logMoneyType = eventInfo.getEventType() == eDouLuoDaLuEventType.MonsterEvent.getIntValue() ? eLogMoneyType.DouLuoDaLuMonsterEvent : eLogMoneyType.DouLuoDaLuPlayerEvent;
            //打斗事件有积分
            if(crossRespMsg.getScore() > 0){
                //加积分道具
                //currencyModule.addCurrency(DouLuoDaLuMgr.getConfig().SCORE_ITEM_ID_FOREST + "=" + crossRespMsg.getScore(), eLogMoneyType.DouLuoDaLuActivity, logMoneyType);
            }
            if(crossRespMsg.hasReward() && !StringUtils.isNullOrEmpty(crossRespMsg.getReward())){
                Property property = new Property();
                DouLuoDaLuMgr.handleGoodsBuff(crossRespMsg.getBuffList(), config, property, crossRespMsg.getReward());
                currencyModule.addCurrency(property, eLogMoneyType.DouLuoDaLuActivity, logMoneyType);
                respMsg.setReward(PropertyHelper.parsePropertyToString(property));
                log.setReward(respMsg.getReward());
            }
            respMsg.setHunHuan(crossRespMsg.getHunHuan());
        }

        respMsg.setScore(crossRespMsg.getScore());

        //暂时
        if(crossRespMsg.hasAllScore()){
            long allScore = crossRespMsg.getAllScore();
            if(allScore > 0) {
                player.getModule(DouLuoDaLuModule.class).updateConditionValue(allScore, eGamePlayerEventType.DouLuoDaLuPhaseOneUserScoreCrossRank.getValue());
            }
        }

        respMsg.addAllBuff(crossRespMsg.getBuffList());
        player.sendPacket(Protocol.U_DOU_LUO_DA_LU_EVENT_HANDLE, respMsg);

        AutoLogMgr.add(log);
    }



    @Override
    public void sendData(GamePlayer player) {

    }
}
